package hot100;

import org.junit.Test;

import java.util.Arrays;
import java.util.PriorityQueue;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/8/3 20:32
 */
public class lc283移动零 {

    /*
    用小根堆的目的 是为了 ，每次都让 下标最小的（最靠前的 ） 0 去进行swap，这样的话次数是最少的！
     */
    public void solve(int nums[]) {
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                queue.add(i);
            }
            else if(queue.size() != 0){
                int min = queue.poll();
                nums[min] = nums[i];
                nums[i] = 0;
                queue.add(i);
            }
        }
        System.out.println(Arrays.toString(nums));
    }



    /*
     更妙的做法
     */
    public void solution(int nums[]){
        int c = 0;
        for(int i = 0;i < nums.length;i++){
            if(nums[i] != 0){
                nums[c++] = nums[i];
//                nums[i] = 0;
            }
        }
        for(int i = c;i < nums.length;i++){
            nums[i] = 0;
        }
    }



    @Test
    public void test(){
        int nums[] = {0,1,0,3,12};
//        solve(nums);
    }
}
